package pe.gob.osce.sirenas.dao.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import pe.gob.osce.sirenas.dao.AreaProfesionDAOLocal;
import pe.gob.osce.sirenas.dao.convert.AreaProfesionConvert;
import pe.gob.osce.sirenas.dao.convert.CapacitacionConvert;
import pe.gob.osce.sirenas.model.AcreditacionDTO;
import pe.gob.osce.sirenas.model.AreaProfesionDTO;
import pe.gob.osce.sirenas.model.CapacitacionDTO;
import pe.gob.osce.sirenas.model.jpa.AreaProfesion;
import pe.gob.osce.sirenas.model.jpa.Capacitacion;
import pe.gob.osce.sirenas.model.jpa.Comunicaciones;
import pe.gob.osce.sirenas.util.ConstanteEJB;
import pe.gob.osce.sirenas.util.ModeloException;



@Stateless
public class AreaProfesionDAOImpl implements AreaProfesionDAOLocal {

	@PersistenceContext(unitName="pe.gob.osce.sirenas.be.pu" )
	private	EntityManager	em;
	ResourceBundle propSirenas = ResourceBundle.getBundle(ConstanteEJB.PROPERTIES);

	@Override 
	public List<AreaProfesionDTO>  listarAreaProfesion()	throws Exception {

		List<AreaProfesionDTO> listAreaProfesionDTO=null;
		//FichaArbitral fichaArbitralJPA=null;
		List<AreaProfesion> listaAreaProfesionJPA=null;
		try{
			StringBuilder  	jpql= new StringBuilder();
			
			
			jpql.append("SELECT ap FROM AreaProfesion ap");
		
			Query	query= em.createQuery( jpql.toString() );
			List<AreaProfesion>	listaObjeto= query.getResultList();
			if(!listaObjeto.isEmpty()) {
				listaAreaProfesionJPA=new ArrayList<AreaProfesion>();
				for (AreaProfesion obj: listaObjeto) {					
					listaAreaProfesionJPA.add(obj);
				}
				listAreaProfesionDTO=AreaProfesionConvert.createListaAreaProfesionDTO(listaAreaProfesionJPA);
			}
			
			
		} catch (NoResultException nre) {
			listAreaProfesionDTO=null;
			 throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_NO_DATA));
		}catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB), e);
		}
		return listAreaProfesionDTO;
	}

	@Override
	public List<AreaProfesion> obtenetListaAreaProfesion() throws Exception {
		
			
		List<AreaProfesion> listaAreaProfesionJPA=null;
		try{
			StringBuilder  	jpql= new StringBuilder();

			jpql.append("SELECT are FROM AreaProfesion are WHERE  are.estado=1 ");
						
			Query	query= em.createQuery( jpql.toString() );
				
			List<AreaProfesion>	listaObjeto= query.getResultList();
			if(!listaObjeto.isEmpty()) {
				listaAreaProfesionJPA=new ArrayList<AreaProfesion>();
				for (AreaProfesion obj: listaObjeto) {					
					listaAreaProfesionJPA.add(obj);
				}
			
			}
			
			
		} catch (NoResultException nre) {
			listaAreaProfesionJPA=null;
			 throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_NO_DATA));
		}catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB), e);
		}
		return listaAreaProfesionJPA;
		
	}

	@Override
	public AreaProfesion insertar(AreaProfesion areaProfesion) throws Exception {
		try {
			areaProfesion=em.merge(areaProfesion);
			em.flush();

		} catch (Exception e) {

			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_NO_INSERT), e);
		}
		
		return areaProfesion;
	}

	@Override
	public AreaProfesion consultarAreaProfesion(Long idAreaProfesion) throws Exception
	{
		AreaProfesion areaProfesionJPA = null;
		try {
			StringBuilder jpql = new StringBuilder();

			jpql.append("SELECT are FROM AreaProfesion are WHERE are.idAreaProfesion=:idAreaProfesion AND are.estado=0 ");

			Query query = em.createQuery(jpql.toString());
			query.setParameter("idAreaProfesion", idAreaProfesion);
			
			AreaProfesion listaObjeto = (AreaProfesion) query.getSingleResult();
			areaProfesionJPA = listaObjeto;

		} catch (NoResultException nre) {
			areaProfesionJPA = null;
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_NO_DATA));
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB), e);
	}
	return areaProfesionJPA;
	}
	
}
